A cluster is a collection of hosts in which processor, memory, storage, and other hardware resources are aggregated for utilization by the hosts in the cluster. A host is capable of running one or more virtual computing instances, such as virtual machines (VMs). A VM typically includes an operating system (OS) running one or more applications to perform a workload. VMs running on a host utilize cluster resources to perform the workloads. However, if a VM is placed on a host with insufficient resources available to meet the resource demands of the VMs, the host becomes overloaded.
In some existing solutions, one or more VMs on an overloaded host may be relocated to a different host in the cluster in an attempt to remediate the overloaded host. A scheduler is utilized in some systems to select a host for placement of VMs and balance the resource utilization among the hosts in the cluster. However, these placement and relocation decisions are frequently made based on insufficient information regarding resource demands of the VMs and resource availability of the hosts. This frequently results in sub-optimal placement of VMs, unbalanced hosts, network saturation, overloading of network links, and/or overall inefficient utilization of available cluster resources.